import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.*;
import java.util.Collections;
import java.util.Arrays;
import javax.swing.*;

@SuppressWarnings("serial")
public class Fyysika_Yl_GUI extends JPanel implements ActionListener {
	JButton next, vihje, teemad;
	JFrame frame;
	JPanel keskpaneel, vastustepaneel, keskjaotus, eastpaneel, joonis;
	JLabel kysimus, vastusevariandid, tyhi1, tyhi2, tyhi3, tyhi4, tyhi5;
	String[] vastused, oiged;
	String tekst, joonisepath, vihjekas;
	int option;
	JLabel[] leibelid;
	JCheckBox[] tsekboxid;
	String[] steemad = { "1 KT", "2 KT", "Kõik ülesanded" };
	Fyysika_Ylesanded.joonis joonisklass = new Fyysika_Ylesanded.joonis();
	Fyysika_Ylesanded.yl1 yles1 = new Fyysika_Ylesanded.yl1();
	Fyysika_Ylesanded.yl2 yles2 = new Fyysika_Ylesanded.yl2();
	Fyysika_Ylesanded.yl3 yles3 = new Fyysika_Ylesanded.yl3();
	Fyysika_Ylesanded.yl4 yles4 = new Fyysika_Ylesanded.yl4();
	Fyysika_Ylesanded.yl5 yles5 = new Fyysika_Ylesanded.yl5();
	Fyysika_Ylesanded.yl6 yles6 = new Fyysika_Ylesanded.yl6();
	Fyysika_Ylesanded.yl7 yles7 = new Fyysika_Ylesanded.yl7();
	Fyysika_Ylesanded.yl8 yles8 = new Fyysika_Ylesanded.yl8();
	Fyysika_Ylesanded.yl9 yles9 = new Fyysika_Ylesanded.yl9();
	Fyysika_Ylesanded.yl10 yles10 = new Fyysika_Ylesanded.yl10();
	Fyysika_Ylesanded.yl11 yles11 = new Fyysika_Ylesanded.yl11();
	Fyysika_Ylesanded.yl12 yles12 = new Fyysika_Ylesanded.yl12();
	Fyysika_Ylesanded.yl13 yles13 = new Fyysika_Ylesanded.yl13();
	Fyysika_Ylesanded.yl14 yles14 = new Fyysika_Ylesanded.yl14();
	Fyysika_Ylesanded.yl15 yles15 = new Fyysika_Ylesanded.yl15();
	Fyysika_Ylesanded.yl16 yles16 = new Fyysika_Ylesanded.yl16();
	Fyysika_Ylesanded.yl17 yles17 = new Fyysika_Ylesanded.yl17();
	Fyysika_Ylesanded.yl18 yles18 = new Fyysika_Ylesanded.yl18();
	Fyysika_Ylesanded.yl19 yles19 = new Fyysika_Ylesanded.yl19();
	Fyysika_Ylesanded.yl20 yles20 = new Fyysika_Ylesanded.yl20();

	public Fyysika_Yl_GUI() {
		option = 1;
		joonis = new JPanel() {
			public void paintComponent(Graphics g) {
				ImageIcon icon = Ikoonilaadija.annaIkoon(joonisepath);
				if (icon != null) {
					g.drawImage(icon.getImage(), 0, 0, getWidth(), getHeight(),
							0, 0, icon.getIconWidth(), icon.getIconHeight(),
							null);
				} else {
					g.drawString("Selle ülesande jaoks pole joonist", getWidth()/2, getHeight()/2);
				}

			}
		};
		joonis.setOpaque(true);
		teenr2ndomid();
		Collections.shuffle(Arrays.asList(vastused));
		setLayout(new BorderLayout());

		kysimus = new JLabel(tekst);
		add(kysimus, BorderLayout.NORTH);
		kysimus.setBorder(BorderFactory.createTitledBorder("Ülesanne"));

		keskpaneel = new JPanel(new GridLayout(1, 2));

		vastusevariandid = new JLabel();
		add(keskpaneel, BorderLayout.CENTER);

		// laen vastusevariandid sisse
		vastustepaneel = new JPanel();
		vastustepaneel.setLayout(new GridLayout(vastused.length, 2));
		tsekboxid = new JCheckBox[vastused.length];
		leibelid = new JLabel[vastused.length];
		boolean odd1 = true;
		boolean oddtsek1 = true;
		for (int i = 0; i < vastused.length; i++) {
			leibelid[i] = new JLabel(vastused[i]);

			leibelid[i].setOpaque(true);
			if (odd1 == true) {
				leibelid[i].setBackground(new Color(240, 255, 240));
				odd1 = false;
			} else {
				leibelid[i].setBackground(new Color(245, 255, 250));
				odd1 = true;
			}
			leibelid[i].setBorder(BorderFactory.createLineBorder(Color.cyan));
			vastustepaneel.add(leibelid[i]);
			tsekboxid[i] = new JCheckBox();
			if (oddtsek1 == false) {
				tsekboxid[i].setBackground(new Color(240, 255, 240));
				oddtsek1 = true;
			} else {
				tsekboxid[i].setBackground(new Color(245, 255, 250));
				oddtsek1 = false;
			}
			tsekboxid[i].setOpaque(true);
			tsekboxid[i].setBorder(BorderFactory.createLineBorder(Color.black));
			vastustepaneel.add(tsekboxid[i]);
		}
		// keskjaotus paneel
		teemad = new JButton("Vali ülesanded!");
		teemad.addActionListener(this);
		next = new JButton("Kontrolli!");
		next.addActionListener(this);
		eastpaneel = new JPanel(new GridLayout(8, 1));
		vihje = new JButton("Vihje");
		vihje.addActionListener(this);
		tyhi1 = new JLabel();
		tyhi2 = new JLabel();
		tyhi3 = new JLabel();
		tyhi4 = new JLabel();
		tyhi5 = new JLabel();
		eastpaneel.add(teemad);
		eastpaneel.add(tyhi3);
		eastpaneel.add(tyhi1);
		eastpaneel.add(tyhi2);
		eastpaneel.add(vihje);
		eastpaneel.add(tyhi4);
		eastpaneel.add(tyhi5);
		eastpaneel.add(next);
		eastpaneel.setBackground(new Color(240, 255, 240));
		eastpaneel.setBorder(BorderFactory.createEtchedBorder());
		add(eastpaneel, BorderLayout.EAST);
		keskpaneel.add(vastustepaneel);
		keskpaneel.add(joonis);
		keskpaneel.setBorder(BorderFactory.createEtchedBorder());
	}

	public void puhastajauus() {
		for (int i = 0; i < vastused.length; i++) {
			vastustepaneel.remove(leibelid[i]);
			vastustepaneel.remove(tsekboxid[i]);
		}

		teenr2ndomid();
		Collections.shuffle(Arrays.asList(vastused));
		kysimus.setText(tekst);
		vastustepaneel.setLayout(new GridLayout(vastused.length, 2));
		tsekboxid = new JCheckBox[vastused.length];
		leibelid = new JLabel[vastused.length];
		boolean odd = true;
		boolean oddtsek = true;

		for (int i = 0; i < vastused.length; i++) {
			leibelid[i] = new JLabel(vastused[i]);
			leibelid[i].setOpaque(true);
			if (odd == true) {
				leibelid[i].setBackground(new Color(240, 255, 240));
				odd = false;
			} else {
				leibelid[i].setBackground(new Color(245, 255, 250));
				odd = true;
			}
			leibelid[i].setBorder(BorderFactory.createLineBorder(Color.cyan));
			vastustepaneel.add(leibelid[i]);
			tsekboxid[i] = new JCheckBox();
			if (oddtsek == false) {
				tsekboxid[i].setBackground(new Color(240, 255, 240));
				oddtsek = true;
			} else {
				tsekboxid[i].setBackground(new Color(245, 255, 250));
				oddtsek = false;
			}
			tsekboxid[i].setOpaque(true);
			tsekboxid[i].setBorder(BorderFactory.createLineBorder(Color.black));
			vastustepaneel.add(tsekboxid[i]);
		}
	}

	public void actionPerformed(ActionEvent e) {
		if (e.getActionCommand() == "Kontrolli!") {

			next.setText("Järgmine!");
			for (int i = 0; i < vastused.length; i++) {
				for (int j = 0; j < oiged.length; j++) {
					if (vastused[i].equals(oiged[j])) {
						leibelid[i].setBackground(Color.GREEN);
					}
				}
			}
		}
		if (e.getActionCommand() == "Järgmine!") {
			next.setText("Kontrolli!");
			puhastajauus();
		}
		if (e.getActionCommand() == "Vihje") {
			JOptionPane.showMessageDialog(null, vihjekas, "Vihje!",
					JOptionPane.INFORMATION_MESSAGE);

		}
		if (e.getActionCommand() == "Vali ülesanded!") {
			Object[] selectionValues = { "1 KT", "2 KT", "Kõik ülesanded" };
			Object selection = JOptionPane.showInputDialog(null,
					"Vali ülesanded, mida soovid lahendada!", "Teemavalik",
					JOptionPane.QUESTION_MESSAGE, null, selectionValues, 3);
			if (selection == "1 KT") {
				option = 1;
				teenr2ndomid();
				puhastajauus();
				next.setText("Kontrolli!"); // bug tekkis, kui vastasti
											// ülesandele, aga "Järgmine" ei
											// vajutatud ja siis
				// taheti ülesannete teemat vahetada. Teema vahetati, aga nupu
				// tekst oli ikka
				// "Järgmine", seega ei saadud esimesele küsimusele vastata.
			}
			if (selection == "2 KT") {
				option = 2;
				teenr2ndomid();
				puhastajauus();
				next.setText("Kontrolli!");
			}
			if (selection == "Kõik ülesanded") {
				option = 0;
				teenr2ndomid();
				puhastajauus();
				next.setText("Kontrolli!");
			}

		}
	}

	public void teenr2ndomid() {
		if (option == 0) {
			int lambikas = (int) (Math.random() * 20);
			switch (lambikas) {
			case 0:
				tekst = yles1.tekst();
				joonisepath = yles1.joonisepath();
				vastused = yles1.vastusevariandid();
				oiged = yles1.oiged();
				vihjekas = yles1.vihje();
				repaint();
				break;
			case 1:
				tekst = yles2.tekst();
				joonisepath = yles2.joonisepath();
				vastused = yles2.vastusevariandid();
				oiged = yles2.oiged();
				vihjekas = yles2.vihje();
				repaint();
				break;

			case 2:
				tekst = yles3.tekst();
				joonisepath = yles3.joonisepath();
				vastused = yles3.vastusevariandid();
				oiged = yles3.oiged();
				vihjekas = yles3.vihje();
				repaint();
				break;
			case 3:
				tekst = yles4.tekst();
				joonisepath = yles4.joonisepath();
				vastused = yles4.vastusevariandid();
				oiged = yles4.oiged();
				vihjekas = yles4.vihje();
				repaint();
				break;
			case 4:
				tekst = yles5.tekst();
				joonisepath = yles5.joonisepath();
				vastused = yles5.vastusevariandid();
				oiged = yles5.oiged();
				vihjekas = yles5.vihje();
				repaint();
				break;
			case 5:
				tekst = yles6.tekst();
				joonisepath = yles6.joonisepath();
				vastused = yles6.vastusevariandid();
				oiged = yles6.oiged();
				vihjekas = yles6.vihje();
				repaint();
				break;
			case 6:
				tekst = yles7.tekst();
				joonisepath = yles7.joonisepath();
				vastused = yles7.vastusevariandid();
				oiged = yles7.oiged();
				vihjekas = yles7.vihje();
				repaint();
				break;
			case 7:
				tekst = yles8.tekst();
				joonisepath = yles8.joonisepath();
				vastused = yles8.vastusevariandid();
				oiged = yles8.oiged();
				vihjekas = yles8.vihje();
				repaint();
				break;
			case 8:
				tekst = yles9.tekst();
				joonisepath = yles9.joonisepath();
				vastused = yles9.vastusevariandid();
				oiged = yles9.oiged();
				vihjekas = yles9.vihje();
				repaint();
				break;
			case 9:
				tekst = yles10.tekst();
				joonisepath = yles10.joonisepath();
				vastused = yles10.vastusevariandid();
				oiged = yles10.oiged();
				vihjekas = yles10.vihje();
				repaint();
				break;
			case 10:
				tekst = yles11.tekst();
				joonisepath = yles11.joonisepath();
				vastused = yles11.vastusevariandid();
				oiged = yles11.oiged();
				vihjekas = yles11.vihje();
				repaint();
				break;
			case 11:
				tekst = yles12.tekst();
				joonisepath = yles12.joonisepath();
				vastused = yles12.vastusevariandid();
				oiged = yles12.oiged();
				vihjekas = yles12.vihje();
				repaint();
				break;
			case 12:
				tekst = yles13.tekst();
				joonisepath = yles13.joonisepath();
				vastused = yles13.vastusevariandid();
				oiged = yles13.oiged();
				vihjekas = yles13.vihje();
				repaint();
				break;
			case 13:
				tekst = yles14.tekst();
				joonisepath = yles14.joonisepath();
				vastused = yles14.vastusevariandid();
				oiged = yles14.oiged();
				vihjekas = yles14.vihje();
				repaint();
				break;
			case 14:
				tekst = yles15.tekst();
				joonisepath = yles15.joonisepath();
				vastused = yles15.vastusevariandid();
				oiged = yles15.oiged();
				vihjekas = yles15.vihje();
				repaint();
				break;
			case 15:
				tekst = yles16.tekst();
				joonisepath = yles16.joonisepath();
				vastused = yles16.vastusevariandid();
				oiged = yles16.oiged();
				vihjekas = yles16.vihje();
				repaint();
				break;
			case 16:
				tekst = yles17.tekst();
				joonisepath = yles17.joonisepath();
				vastused = yles17.vastusevariandid();
				oiged = yles17.oiged();
				vihjekas = yles17.vihje();
				repaint();
				break;
			case 17:
				tekst = yles18.tekst();
				joonisepath = yles18.joonisepath();
				vastused = yles18.vastusevariandid();
				oiged = yles18.oiged();
				vihjekas = yles18.vihje();
				repaint();
				break;
			case 18:
				tekst = yles19.tekst();
				joonisepath = yles19.joonisepath();
				vastused = yles19.vastusevariandid();
				oiged = yles19.oiged();
				vihjekas = yles19.vihje();
				repaint();
				break;
			case 19:
				tekst = yles20.tekst();
				joonisepath = yles20.joonisepath();
				vastused = yles20.vastusevariandid();
				oiged = yles20.oiged();
				vihjekas = yles20.vihje();
				repaint();
				break;
			} // switch
		} // if
		if (option == 1) {
			int lambikas1 = (int) (Math.random() * 8);
			switch (lambikas1) {
			case 0:
				tekst = yles1.tekst();
				joonisepath = yles1.joonisepath();
				vastused = yles1.vastusevariandid();
				oiged = yles1.oiged();
				vihjekas = yles1.vihje();
				repaint();
				break;
			case 1:
				tekst = yles2.tekst();
				joonisepath = yles2.joonisepath();
				vastused = yles2.vastusevariandid();
				oiged = yles2.oiged();
				vihjekas = yles2.vihje();
				repaint();
				break;

			case 2:
				tekst = yles3.tekst();
				joonisepath = yles3.joonisepath();
				vastused = yles3.vastusevariandid();
				oiged = yles3.oiged();
				vihjekas = yles3.vihje();
				repaint();
				break;
			case 3:
				tekst = yles4.tekst();
				joonisepath = yles4.joonisepath();
				vastused = yles4.vastusevariandid();
				oiged = yles4.oiged();
				vihjekas = yles4.vihje();
				repaint();
				break;
			case 4:
				tekst = yles5.tekst();
				joonisepath = yles5.joonisepath();
				vastused = yles5.vastusevariandid();
				oiged = yles5.oiged();
				vihjekas = yles5.vihje();
				repaint();
				break;
			case 5:
				tekst = yles6.tekst();
				joonisepath = yles6.joonisepath();
				vastused = yles6.vastusevariandid();
				oiged = yles6.oiged();
				vihjekas = yles6.vihje();
				repaint();
				break;
			case 6:
				tekst = yles7.tekst();
				joonisepath = yles7.joonisepath();
				vastused = yles7.vastusevariandid();
				oiged = yles7.oiged();
				vihjekas = yles7.vihje();
				repaint();
				break;
			case 7:
				tekst = yles8.tekst();
				joonisepath = yles8.joonisepath();
				vastused = yles8.vastusevariandid();
				oiged = yles8.oiged();
				vihjekas = yles8.vihje();
				repaint();
				break;
			}// switch
		} // if option
		if (option == 2) {
			int lambikas2 = (int) (Math.random() * 12 + 1);
			switch (lambikas2) {
			case 1:
				tekst = yles9.tekst();
				joonisepath = yles9.joonisepath();
				vastused = yles9.vastusevariandid();
				oiged = yles9.oiged();
				vihjekas = yles9.vihje();
				repaint();
				break;
			case 2:
				tekst = yles10.tekst();
				joonisepath = yles10.joonisepath();
				vastused = yles10.vastusevariandid();
				oiged = yles10.oiged();
				vihjekas = yles10.vihje();
				repaint();
				break;
			case 3:
				tekst = yles11.tekst();
				joonisepath = yles11.joonisepath();
				vastused = yles11.vastusevariandid();
				oiged = yles11.oiged();
				vihjekas = yles11.vihje();
				repaint();
				break;
			case 4:
				tekst = yles12.tekst();
				joonisepath = yles12.joonisepath();
				vastused = yles12.vastusevariandid();
				oiged = yles12.oiged();
				vihjekas = yles12.vihje();
				repaint();
				break;
			case 5:
				tekst = yles13.tekst();
				joonisepath = yles13.joonisepath();
				vastused = yles13.vastusevariandid();
				oiged = yles13.oiged();
				vihjekas = yles13.vihje();
				repaint();
				break;
			case 6:
				tekst = yles14.tekst();
				joonisepath = yles14.joonisepath();
				vastused = yles14.vastusevariandid();
				oiged = yles14.oiged();
				vihjekas = yles14.vihje();
				repaint();
				break;
			case 7:
				tekst = yles15.tekst();
				joonisepath = yles15.joonisepath();
				vastused = yles15.vastusevariandid();
				oiged = yles15.oiged();
				vihjekas = yles15.vihje();
				repaint();
				break;
			case 8:
				tekst = yles16.tekst();
				joonisepath = yles16.joonisepath();
				vastused = yles16.vastusevariandid();
				oiged = yles16.oiged();
				vihjekas = yles16.vihje();
				repaint();
				break;
			case 9:
				tekst = yles17.tekst();
				joonisepath = yles17.joonisepath();
				vastused = yles17.vastusevariandid();
				oiged = yles17.oiged();
				vihjekas = yles17.vihje();
				repaint();
				break;
			case 10:
				tekst = yles18.tekst();
				joonisepath = yles18.joonisepath();
				vastused = yles18.vastusevariandid();
				oiged = yles18.oiged();
				vihjekas = yles18.vihje();
				repaint();
				break;
			case 11:
				tekst = yles19.tekst();
				joonisepath = yles19.joonisepath();
				vastused = yles19.vastusevariandid();
				oiged = yles19.oiged();
				vihjekas = yles19.vihje();
				repaint();
				break;
			case 12:
				tekst = yles20.tekst();
				joonisepath = yles20.joonisepath();
				vastused = yles20.vastusevariandid();
				oiged = yles20.oiged();
				vihjekas = yles20.vihje();
				repaint();
				break;
			} // switch
		} // if
	} // meetod

} // klass

